/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.logging.Level;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.primefaces.event.DateSelectEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.controlador.backingBean.BKCajaChica;
import pe.com.cotelasa.scp.controlador.backingBean.BKDocumentoSustentador;
import pe.com.cotelasa.scp.controlador.backingBean.BKMovimientoCajaChica;
import pe.com.cotelasa.scp.controlador.backingBean.BKReporteAdministracion;
import pe.com.cotelasa.scp.dominio.common.Constantes;
import pe.com.cotelasa.scp.dominio.common.URLPaginacion;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioFecha;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioCajaChica;
import pe.com.cotelasa.scp.dominio.service.IServicioDocumentoSustentador;
import pe.com.cotelasa.scp.dominio.service.IServicioMovimientoCajaChica;
import pe.com.cotelasa.scp.dominio.service.IServicioSede;
import pe.com.cotelasa.scp.entidad.CajaChica;
import pe.com.cotelasa.scp.entidad.DocumentoSustentador;
import pe.com.cotelasa.scp.entidad.MovimientoCajaChica;
import pe.com.cotelasa.scp.entidad.Sede;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

/**
 *
 * @author DESARROLLO01
 */
@SuppressWarnings("serial")
@Named(value = "MBReporteAdministracion")
@Scope("request")
public class MBReporteAdministracion extends MBGenerico implements Serializable {

    private static final long serialVersionUID = -8863078593063550874L;
    private static Logger logger = Logger.getLogger(MBReporteAdministracion.class);
    @Inject
    private BKReporteAdministracion bkReporteAdm;
    @Inject
    private BKCajaChica bkCajaChica;
    @Inject
    private BKMovimientoCajaChica bkMovCajaChica;
    @Inject
    private BKDocumentoSustentador bkDocumentoSustentador;
    @Inject
    private IServicioCajaChica servicioCajaChica;
    @Inject
    private IServicioMovimientoCajaChica servicioMovCajaChica;
    @Inject
    private IServicioDocumentoSustentador servicioDocSustentador;
    @Inject
    private IServicioSede servicioSede;
    @Autowired
    BKSession session;
    private String URL;

    public MBReporteAdministracion() {
    }

    public String mostrarMantenimiento() {

        bkReporteAdm.setCajaChicaBusqueda(new CajaChica());
        bkReporteAdm.setMovimientoBusqueda(new MovimientoCajaChica());
        bkReporteAdm.setDocumentoBusqueda(new DocumentoSustentador());

        bkReporteAdm.setIdSede(0);

        try {

            //if (session.getUsuario().getIdRol().getNombre().equals("ADMINISTRADOR")) {
                bkReporteAdm.setMostrarListaSedes(servicioSede.listaSedePorEmpresa(session.getEmpresa().getId()));
            /*} else {
                bkReporteAdm.setIdSede(session.getSede().getId());
                bkReporteAdm.setSede(session.getSede());
                System.out.println("La direccion de la sede es:" + bkReporteAdm.getSede().getDireccion());
            }*/

        } catch (ServiceException e) {
            System.out.println(e.getMessage());
            mostrarError("Ocurrieron algunos problemas al actualizar la información. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }

        return URLPaginacion.ReporteAdministracion.URL_REPORTE_RAIZ;
    }

    public void reporteDeDocumentos() throws IOException, ServiceException {

        Date fechaIni = bkReporteAdm.getFechaInicioDoc();
        Date fechaFin = bkReporteAdm.getFechaFinalDoc();


        String tipoDoc = bkReporteAdm.getDocumentoBusqueda().getTipoDocumento();

        Sede sede = new Sede();
        if (bkReporteAdm.getIdSede() != 0) {
            sede = servicioSede.conseguirSedePorId(bkReporteAdm.getIdSede());
        } else {
            sede.setIdEmpresa(session.getEmpresa());
        }

        if (sede != null) {
            //La lista se encuentra desordenada, se debe ordenar las columnas 
            Collection<DocumentoSustentador> listaDocumentos = null;

            DocumentoSustentador docB = new DocumentoSustentador();
            docB.setTipoDocumento(tipoDoc);
            docB.setIdMovimientoCajaChica(new MovimientoCajaChica());
            docB.getIdMovimientoCajaChica().setIdCajaChica(new CajaChica());
            docB.getIdMovimientoCajaChica().getIdCajaChica().setIdSede(sede);

            try {
                listaDocumentos = servicioDocSustentador.listarDocumentoPorFiltro(docB, fechaIni, fechaFin);
            } catch (ServiceException e) {
                e.printStackTrace();
            }

            if (listaDocumentos != null) {

                HSSFWorkbook wb = new HSSFWorkbook();
                //HSSFWorkbook wb = new HSSFWorkbook(file);        
                HSSFSheet sheet = wb.createSheet("Documentos");

                sheet.setAutobreaks(true);
                sheet.setDefaultColumnWidth(20);
                //sheet.setDefaultRowHeight(Short.valueOf("30"));                
                sheet.setAlternativeFormula(true);
                //sheet.setVerticallyCenter(true);
                sheet.setRowSumsBelow(true);

                HSSFCellStyle borderStyle = wb.createCellStyle();
                borderStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                borderStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                borderStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                borderStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);

                HSSFCellStyle borderDotStyle = wb.createCellStyle();
                borderDotStyle.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);
                borderDotStyle.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);
                borderDotStyle.setBorderRight(HSSFCellStyle.BORDER_DOTTED);
                borderDotStyle.setBorderTop(HSSFCellStyle.BORDER_DOTTED);

                /**
                 * ***** fuente para titulo ******************
                 */
                HSSFFont cabFont = wb.createFont();
                cabFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                cabFont.setFontHeightInPoints(Short.valueOf("12"));

                HSSFCellStyle cabStyle = wb.createCellStyle();
                cabStyle.setFont(cabFont);
                cabStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                /*
                 * *** fuente para los datos de cabecera de reporte y cabecera de la tabla resumen
                 */
                HSSFFont datosCabFont = wb.createFont();
                datosCabFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                datosCabFont.setFontHeightInPoints(Short.valueOf("7"));

                HSSFCellStyle datosCabStyle = wb.createCellStyle();
                datosCabStyle.setFont(datosCabFont);
                /**
                 * ***** fuente para total del Importe de caja
                 * ******************
                 */
                HSSFFont cantFont = wb.createFont();
                cantFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                cantFont.setFontHeightInPoints(Short.valueOf("7"));

                HSSFCellStyle cantStyle = wb.createCellStyle();
                cantStyle.cloneStyleFrom(borderStyle);
                cantStyle.setFont(cantFont);
                /**
                 * ***** fuente para detalle de documentos ******************
                 */
                HSSFFont contFont = wb.createFont();
                contFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                contFont.setFontHeightInPoints(Short.valueOf("8"));

                HSSFCellStyle contenidoStyle = wb.createCellStyle();
                contenidoStyle.cloneStyleFrom(borderStyle);
                contenidoStyle.setFont(contFont);
                contenidoStyle.setWrapText(true);

                /*
                 *  Fuente para los valores de cada etiqueta de caja chica (Tararan, compras, 10-04-13)
                 */

                HSSFFont contValueFont = wb.createFont();
                contValueFont.setFontHeightInPoints(Short.valueOf("7"));

                HSSFCellStyle celdaValueStyle = wb.createCellStyle();
                celdaValueStyle.cloneStyleFrom(borderDotStyle);
                celdaValueStyle.setFont(contValueFont);
                

                //Datos Cabecera de la Caja Chica   }
                HSSFRow rowCab = sheet.createRow(1);
                HSSFCell cellCab0 = rowCab.createCell(0);
                cellCab0.setCellStyle(cabStyle);
                cellCab0.setCellValue("RESUMEN DE DOCUMENTOS " + armarFecha(fechaIni, fechaFin));
                CellRangeAddress region = new CellRangeAddress(1, 1, 0, 11);
                sheet.addMergedRegion(region);
                //generarCabeceraReporte(idRpte, sede, tipoDoc, fechaIni, fechaFin, wb, sheet, cabStyle, celdaEtiquetaStyle, celdaValueStyle);
                //Genera la cabecera de la tabla
                generarCabeceraTablaDoc(sheet, contenidoStyle, datosCabStyle); //sin estilos 

                //Recorrer la coleccion de Map y llenar en las filas posteriores a la cabecera
                int fila = 6;
                //int Columna=0;
                HSSFRow rowDetalle;
                BigDecimal total = BigDecimal.ZERO;
                for (DocumentoSustentador doc : listaDocumentos) {
                    rowDetalle = sheet.createRow(fila);
                    total = total.add(doc.getTotal());
                    setearValorColumnaDoc(wb, rowDetalle, doc, celdaValueStyle);

                    fila++;
                }
                //Generacion de la ultima fila para el total del Importe de Caja 
                HSSFDataFormat df = wb.createDataFormat();
                cantStyle.setDataFormat(df.getFormat("0.00"));

                //El total siempre va en la direccion de la columna Importe Soles
                //Total columna 11
                //numero columna 12
                HSSFRow rowTotal;
                rowTotal = sheet.createRow(fila);
                HSSFCell celda = rowTotal.createCell(10);
                celda.setCellStyle(cantStyle);
                celda.setCellValue("TOTAL: ");

                HSSFCell celdaMonto = rowTotal.createCell(11);
                celdaMonto.setCellStyle(cantStyle);
                celdaMonto.setCellValue(total.doubleValue());


                FacesContext facesContext = FacesContext.getCurrentInstance();
                ExternalContext externalContext = facesContext.getExternalContext();
                externalContext.setResponseContentType("application/vnd.ms-excel");
                externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"DocumentosResumen.xls\"");

                wb.write(externalContext.getResponseOutputStream());
                facesContext.responseComplete();
            } else {
                mostrarMensaje("No se encontraron documentos con los filtros ingresados");
            }
        } else {
            mostrarError("Usted no ha seleccionado la sede. Porfavor seleccione una");
        }

    }

    public void setearValorColumnaDoc(HSSFWorkbook wb, HSSFRow rowDetalle, DocumentoSustentador doc, HSSFCellStyle contStyle) {

        HSSFCell celda;

        celda = rowDetalle.createCell(0);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getIdMovimientoCajaChica().getIdCajaChica().getIdSede().getNombre());

        celda = rowDetalle.createCell(1);
        celda.setCellStyle(contStyle);
        celda.setCellValue(UtilitarioFecha.formatearFecha(doc.getFechaSustentacion(), "dd/MM/yyyy"));

        celda = rowDetalle.createCell(2);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getIdMovimientoCajaChica().getIdCajaChica().getNombre());

        celda = rowDetalle.createCell(3);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getIdMovimientoCajaChica().getSolicitante());

        celda = rowDetalle.createCell(4);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getRazonSocial());

        celda = rowDetalle.createCell(5);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getTipoDocumento());

        celda = rowDetalle.createCell(6);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getNumDocumento());

        celda = rowDetalle.createCell(7);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getConcepto());

        celda = rowDetalle.createCell(8);
        celda.setCellStyle(contStyle);
        celda.setCellValue(doc.getMoneda().getNombre());


        HSSFDataFormat df = wb.createDataFormat();
        contStyle.setDataFormat(df.getFormat("0.00"));
        if (doc.getMoneda().getId() == Constantes.TipoMoneda.DOLARES) {
            celda = rowDetalle.createCell(9);
            celda.setCellStyle(contStyle);
            celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
            celda.setCellValue(doc.getMontoDocumento().doubleValue());

            celda = rowDetalle.createCell(10);
            celda.setCellStyle(contStyle);
            celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
            celda.setCellValue(doc.getTipoCambio().doubleValue());
        }else{
            celda = rowDetalle.createCell(9);
            celda.setCellStyle(contStyle);
            celda.setCellValue(" ");

            celda = rowDetalle.createCell(10);
            celda.setCellStyle(contStyle);
            celda.setCellValue(" ");
        }



        celda = rowDetalle.createCell(11);
        celda.setCellStyle(contStyle);
        celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        celda.setCellValue(doc.getTotal().doubleValue());

        
    }

    public void generarCabeceraTablaDoc(HSSFSheet sheet, HSSFCellStyle contStyle, HSSFCellStyle datosCabStyle) {

        HSSFRow rowCabTabla = sheet.createRow(5);

        HSSFCell celdaCC = rowCabTabla.createCell(0);
        celdaCC.setCellStyle(contStyle);
        celdaCC.setCellValue("SEDE");

        HSSFCell celda0 = rowCabTabla.createCell(1);
        celda0.setCellStyle(contStyle);
        celda0.setCellValue("FECHA SUSTENTO");

        HSSFCell celda00 = rowCabTabla.createCell(2);
        celda00.setCellStyle(contStyle);
        celda00.setCellValue("CAJA CHICA");

        HSSFCell celda5 = rowCabTabla.createCell(3);
        celda5.setCellStyle(contStyle);
        celda5.setCellValue("RESPOSABLE");

        HSSFCell celda2 = rowCabTabla.createCell(4);
        celda2.setCellStyle(contStyle);
        celda2.setCellValue("RAZON SOCIAL/NOMBRE");

        HSSFCell celda3 = rowCabTabla.createCell(5);
        celda3.setCellStyle(contStyle);
        celda3.setCellValue("TIPO DOCUMENTO");

        HSSFCell celda4 = rowCabTabla.createCell(6);
        celda4.setCellStyle(contStyle);
        celda4.setCellValue("NUM DOCUMENTO");

        HSSFCell celda6 = rowCabTabla.createCell(7);
        celda6.setCellStyle(contStyle);
        celda6.setCellValue("CONCEPTO");

        HSSFCell celda7 = rowCabTabla.createCell(8);
        celda7.setCellStyle(contStyle);
        celda7.setCellValue("MONEDA");

        HSSFCell celda8 = rowCabTabla.createCell(9);
        celda8.setCellStyle(contStyle);
        celda8.setCellValue("IMPORTE DOLARES");

        HSSFCell celda9 = rowCabTabla.createCell(10);
        celda9.setCellStyle(contStyle);
        celda9.setCellValue("T/C");

        HSSFCell celda10 = rowCabTabla.createCell(11);
        celda10.setCellStyle(contStyle);
        celda10.setCellValue("IMPORTE SOLES");
    }

    /**
     * **************** REPORTE DE MOVIMIENTOS DE CAJA CHICA *****
     */
    /**
     * ***********************************************************
     */
    public void reporteDeMovimientos() throws IOException, ServiceException {

        Date fechaIni = bkReporteAdm.getFechaInicioMov();
        Date fechaFin = bkReporteAdm.getFechaFinalMov();

        String motivo = bkReporteAdm.getMovimientoBusqueda().getMotivo();
        //
        Sede sede = new Sede();
        if (bkReporteAdm.getIdSede() != 0) {
            sede = servicioSede.conseguirSedePorId(bkReporteAdm.getIdSede());
        } else {
            sede.setIdEmpresa(session.getEmpresa());
        }

        MovimientoCajaChica movB = new MovimientoCajaChica();
        movB.setIdCajaChica(new CajaChica());
        movB.getIdCajaChica().setIdSede(sede);
        movB.setMotivo(motivo);
        movB.setTipoMovimiento(Constantes.TipoMovimiento.SALIDA);
        try {
            this.bkMovCajaChica.setListaMovCajaChicaActivas(servicioMovCajaChica.listarMovimientoPorFiltro(movB, fechaIni, fechaFin));
        } catch (ServiceException ex) {
            ex.printStackTrace();
        }


        if (this.bkMovCajaChica.getListaMovCajaChicaActivas() != null) {

            //Aca se podria ordenar el mapa de movimientos por fecha
            //Ordenamos la listaDocumentosResumen de Movimientos

            HSSFWorkbook wb = new HSSFWorkbook();
            //HSSFWorkbook wb = new HSSFWorkbook(file);        
            HSSFSheet sheet = wb.createSheet("Movimientos");

            sheet.setAutobreaks(true);
            sheet.setDefaultColumnWidth(20);
            //sheet.setDefaultRowHeight(Short.valueOf("30"));                
            sheet.setAlternativeFormula(true);
            //sheet.setVerticallyCenter(true);
            sheet.setRowSumsBelow(true);

            HSSFCellStyle borderStyle = wb.createCellStyle();
            borderStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            borderStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            borderStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
            borderStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);

            HSSFCellStyle borderDotStyle = wb.createCellStyle();
            borderDotStyle.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);
            borderDotStyle.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);
            borderDotStyle.setBorderRight(HSSFCellStyle.BORDER_DOTTED);
            borderDotStyle.setBorderTop(HSSFCellStyle.BORDER_DOTTED);
            /**
             * ***** fuente para titulo ******************
             */
            HSSFFont cabFont = wb.createFont();
            cabFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            cabFont.setFontHeightInPoints(Short.valueOf("12"));

            HSSFCellStyle cabStyle = wb.createCellStyle();
            cabStyle.setFont(cabFont);
            cabStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            /*
             * *** fuente para los datos de cabecera de reporte y cabecera de la tabla resumen
             */
            HSSFFont datosCabFont = wb.createFont();
            datosCabFont.setColor(HSSFColor.BLACK.index);
            datosCabFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            datosCabFont.setFontHeightInPoints(Short.valueOf("8"));

            HSSFCellStyle datosCabStyle = wb.createCellStyle();
            datosCabStyle.setFont(datosCabFont);
            /**
             * ***** fuente para total del Importe de caja ******************
             */
            HSSFFont cantFont = wb.createFont();
            cantFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            cantFont.setFontHeightInPoints(Short.valueOf("7"));

            HSSFCellStyle cantStyle = wb.createCellStyle();
            cantStyle.cloneStyleFrom(borderStyle);
            cantStyle.setFont(cantFont);
            /**
             * ***** fuente para detalle de documentos ******************
             */
            HSSFFont contFont = wb.createFont();
            contFont.setColor(HSSFColor.BLACK.index);
            contFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            contFont.setFontHeightInPoints(Short.valueOf("8"));

            HSSFCellStyle contenidoStyle = wb.createCellStyle();
            contenidoStyle.cloneStyleFrom(borderStyle);
            contenidoStyle.setFont(contFont);
            contenidoStyle.setWrapText(true);

            /*
             *  Fuente para los valores de cada etiqueta de caja chica (Tararan, compras, 10-04-13)
             */

            HSSFFont contValueFont = wb.createFont();
            contValueFont.setFontHeightInPoints(Short.valueOf("7"));

            HSSFCellStyle celdaValueStyle = wb.createCellStyle();
            celdaValueStyle.cloneStyleFrom(borderDotStyle);
            celdaValueStyle.setFont(contValueFont);
            //celdaValueStyle.setDataFormat(HSSFCell.CELL_TYPE_ERROR);

            //Datos Cabecera de la Caja Chica   }
            HSSFRow rowCab = sheet.createRow(1);
            HSSFCell cellCab0 = rowCab.createCell(0);
            cellCab0.setCellStyle(cabStyle);
            cellCab0.setCellValue("RESUMEN DE MOVIMIENTOS " + armarFecha(fechaIni, fechaFin));
            CellRangeAddress region = new CellRangeAddress(1, 1, 0, 7);
            sheet.addMergedRegion(region);

            //String idRpte = "mov";
            //generarCabeceraReporte(idRpte, sede, motivo, fechaIni, fechaFin, wb, sheet, cabStyle, celdaEtiquetaStyle, celdaValueStyle);
            //Genera la cabecera de la tabla
            generarCabeceraTablaMov(sheet, contenidoStyle, datosCabStyle); //sin estilos 

            //Recorrer la coleccion de Map y llenar en las filas posteriores a la cabecera
            BigDecimal solicitado = BigDecimal.ZERO;
            BigDecimal usado = BigDecimal.ZERO;
            //int Columna=0;
            int fila = 6;
            HSSFRow rowDetalle;
            for (MovimientoCajaChica mov : this.bkMovCajaChica.getListaMovCajaChicaActivas()) {
                rowDetalle = sheet.createRow(fila);
                solicitado = solicitado.add(mov.getMonto());
                usado = usado.add(mov.getMontoUsado());
                setearValorColumnaMov(wb, rowDetalle, mov, celdaValueStyle);
                fila++;
            }
            //Generacion de la ultima fila para el total del Importe de Caja 
            HSSFDataFormat df = wb.createDataFormat();
            cantStyle.setDataFormat(df.getFormat("0.00"));

            //El total siempre va en la direccion de la columna Importe Soles
            //Total columna 6
            //numero columna 7
            HSSFRow rowTotal;
            rowTotal = sheet.createRow(fila);
            HSSFCell celda = rowTotal.createCell(5);
            celda.setCellStyle(cantStyle);
            celda.setCellValue("TOTAL: ");

            HSSFCell celdaMonto = rowTotal.createCell(6);
            celdaMonto.setCellStyle(cantStyle);
            celdaMonto.setCellValue(solicitado.doubleValue());

            celdaMonto = rowTotal.createCell(7);
            celdaMonto.setCellStyle(cantStyle);
            celdaMonto.setCellValue(usado.doubleValue());


            FacesContext facesContext = FacesContext.getCurrentInstance();
            ExternalContext externalContext = facesContext.getExternalContext();
            externalContext.setResponseContentType("application/vnd.ms-excel");
            externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"MovimientoResumen.xls\"");

            wb.write(externalContext.getResponseOutputStream());
            facesContext.responseComplete();
        } else {
            mostrarMensaje("No se encontraron movimientos con los filtros ingresados");
        }

    }

    public void setearValorColumnaMov(HSSFWorkbook wb, HSSFRow rowDetalle, MovimientoCajaChica mov, HSSFCellStyle contStyle) {
        HSSFCell celda;
        celda = rowDetalle.createCell(0);
        celda.setCellStyle(contStyle);
        celda.setCellValue(mov.getIdCajaChica().getIdSede().getNombre());

        celda = rowDetalle.createCell(1);
        celda.setCellStyle(contStyle);
        String fecha = UtilitarioFecha.formatearFecha(mov.getFechaSolicitud(), "dd/MM/yyyy");
        celda.setCellValue(fecha);

        celda = rowDetalle.createCell(2);
        celda.setCellStyle(contStyle);
        celda.setCellValue(mov.getIdCajaChica().getNombre());

        celda = rowDetalle.createCell(3);
        celda.setCellStyle(contStyle);
        celda.setCellValue(mov.getMotivo());

        celda = rowDetalle.createCell(4);
        celda.setCellStyle(contStyle);
        celda.setCellValue(mov.getSolicitante());

        celda = rowDetalle.createCell(5);
        celda.setCellStyle(contStyle);
        celda.setCellValue(mov.getDescEstadoMovimiento());

        HSSFDataFormat df = wb.createDataFormat();
        contStyle.setDataFormat(df.getFormat("0.00"));

        celda = rowDetalle.createCell(6);
        celda.setCellStyle(contStyle);
        celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        celda.setCellValue(mov.getMonto().doubleValue());

        celda = rowDetalle.createCell(7);
        celda.setCellStyle(contStyle);
        celda.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
        celda.setCellValue(mov.getMontoUsado().doubleValue());

    }

    public void generarCabeceraTablaMov(HSSFSheet sheet, HSSFCellStyle contStyle, HSSFCellStyle datosCabStyle) {

        HSSFRow rowCabTabla = sheet.createRow(5);

        HSSFCell celda = rowCabTabla.createCell(0);
        celda.setCellStyle(contStyle);
        celda.setCellValue("SEDE");

        HSSFCell celda1 = rowCabTabla.createCell(1);
        celda1.setCellStyle(contStyle);
        celda1.setCellValue("FECHA SOLICITUD");

        HSSFCell celda00 = rowCabTabla.createCell(2);
        celda00.setCellStyle(contStyle);
        celda00.setCellValue("CAJA CHICA");

        HSSFCell celda0 = rowCabTabla.createCell(3);
        celda0.setCellStyle(contStyle);
        celda0.setCellValue("MOTIVO");

        HSSFCell celda2 = rowCabTabla.createCell(4);
        celda2.setCellStyle(contStyle);
        celda2.setCellValue("SOLICITANTE");

        HSSFCell celda3 = rowCabTabla.createCell(5);
        celda3.setCellStyle(contStyle);
        celda3.setCellValue("ESTADO");

        HSSFCell celda5 = rowCabTabla.createCell(6);
        celda5.setCellStyle(contStyle);
        celda5.setCellValue("MONTO SOLICITADO");

        HSSFCell celda6 = rowCabTabla.createCell(7);
        celda6.setCellStyle(contStyle);
        celda6.setCellValue("MONTO USADO");

    }

    public String armarFecha(Date inicio, Date fin) {
        String fecha = "";
        if (inicio == null && fin == null) {
            fecha = "Al " + UtilitarioFecha.formatearFecha(new Date(), "dd MMMM yyyy").toUpperCase();
        } else if (inicio != null && fin != null) {
            fecha = "Del " + UtilitarioFecha.formatearFecha(inicio, "dd MMMM yyyy").toUpperCase() + " al "
                    + UtilitarioFecha.formatearFecha(fin, "dd MMMM yyyy").toUpperCase();
        } else if (inicio == null) {
            fecha = "Al " + UtilitarioFecha.formatearFecha(fin, "dd MMMM yyyy").toUpperCase();
        } else if (fin == null) {
            fecha = "Del " + UtilitarioFecha.formatearFecha(inicio, "dd MMMM yyyy").toUpperCase() + " al "
                    + UtilitarioFecha.formatearFecha(new Date(), "dd MMMM yyyy").toUpperCase();
        }


        return fecha;
    }
}
